package com.ruoyi.project.cms.type.controller;

import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.project.cms.type.domain.Type;
import com.ruoyi.project.cms.type.service.CmsTypeServiceImpl;
import com.ruoyi.project.cms.type.service.ICmsTypeService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author 黄药师
 * @date 2021-01-29 17:20
 * @desc 巨梯学院 http://www.jutixueyuan.com
 */

@Controller
@RequestMapping("/cms/type")
public class CmsTypeController extends BaseController {

    // 模板跳转的前缀
    private String prefix = "cms/type";

    @Autowired
    private ICmsTypeService cmsTypeService;

    /**
     * 点击菜单 页面的跳转
     * @return
     */
    @RequiresPermissions("cms:type:view")  //权限
    @GetMapping()
    public String type()
    {
        // 找打指定的 templates 模板
        // 在resource 下面的 templates 下面的 cms/type 找type.HTML
        return prefix + "/type";
    }

    /**
     *  查询type的数据 是list的查询
     *  获取表单数据
     *  返回指定的数据格式  这里进行了封装 返回tableInfo
     *
     */
    @RequiresPermissions("cms:type:list")
    @RequestMapping("list")
    @ResponseBody
    public TableDataInfo list(Type type){

        // 分页
        // 调用 baseContronller 中的分页方法  初始化了 pageSize 和pageNum
        // 分页使用时  mybatis的分页查询  pagehelper:
        startPage();
        // 查询 list 数据
        List<Type> types = cmsTypeService.selectTypeList(type);

        // 返回 tableDataInfo
        return getDataTable(types);
    }

    /**
     * 跳转到 add的页面
     * @return
     */
    @GetMapping("add")
    public String add(){
        return prefix + "/add";
    }

    /**
     *   GetMapping    请求都是页面跳转
     *   PostMapping   数据处理操作
     * @return
     */
    @RequiresPermissions("cms:type:add")
    @ResponseBody
    @PostMapping("add")
    public AjaxResult add(Type type){

        System.out.println("type = " + type);

        // 再次做了校验
        if ("1".equals(cmsTypeService.checktypenameunique(type))){
            return error("新增公告类型'" +type.getTypeName() + "'失败，公告类型名称已存在");
        }

        // 通过 row 响应的执行行数  进行判断
        //  toAjax 的封装  return rows > 0 ? success() : error();
        // row >1 success()
        //否则    error()
        return  toAjax(cmsTypeService.insertType(type));
    }

    /**
     *  get 请求处理 页面跳转
     *     查询指定的 type 发送到 页面
     *
     *  发送的请求是restful 在路上拿到 typeid 通过这个id查询数据
     *
     * @return
     */
    @RequiresPermissions("cms:type:edit")
    @GetMapping("edit/{typeId}")
    public String edit(@PathVariable Integer typeId, Model model){

        System.out.println("typeId = " + typeId);
        Type type = cmsTypeService.selectTypeById(typeId);
        model.addAttribute("type",type);

        return prefix + "/edit";
    }

    @RequiresPermissions("cms:type:edit")
    @PostMapping("edit")
    @ResponseBody
    public AjaxResult edit(Type type){
        //修改的type
        return toAjax(cmsTypeService.updatetype(type));
    }

    @RequiresPermissions("cms:type:remove")
    @PostMapping("remove")
    @ResponseBody
    public AjaxResult remove(String ids){
        try
        {
            return toAjax(cmsTypeService.deleteTypeByIds(ids));
        }
        catch (Exception e)
        {
            return error(e.getMessage());
        }
    }

    /**
     * 校验 typeName 的唯一性
     */
    @ResponseBody
    @PostMapping("checkTypeNameUnique")
    public String checktypenameunique(Type type){
        //返回字符串
        return cmsTypeService.checktypenameunique(type);
    }

}

